#include "ClientWorldObjects.h"

#include <iostream>

using namespace std;

ClientWorldObjects::ClientWorldObjects(sf::TcpSocket* s) {
	socket = s;
	size_t received;

	/*Recois le nombre de gems jaunes sur le serveur*/
	socket->receive(&yellowGemsNumber, sizeof(int), received);
	
	/*Initialise le tableau contenant les gems jaunes*/
	yellowGems = (GemClient**)malloc(sizeof(GemClient*) * yellowGemsNumber);
	for(int i=0; i<yellowGemsNumber; i++) {
		yellowGems[i] = new GemClient(GemColour::YELLOW);  
		yellowGems[i]->receive(*socket);  
	}

	/*Recois le nombre de gems violettes sur le serveur*/
	socket->receive(&violetGemsNumber, sizeof(int), received);
	
	/*Initialise le tableau contenant les gems violettes*/
	violetGems = (GemClient**)malloc(sizeof(GemClient*) * violetGemsNumber);
	for(int i=0; i<violetGemsNumber; i++) {
		violetGems[i] = new GemClient(GemColour::PURPLE);  
		violetGems[i]->receive(*socket);  
	}

}

/*Appelle les methode draw de chaque objet du monde*/
void ClientWorldObjects::draw(sf::RenderWindow& w) {
	for(int i=0; i<yellowGemsNumber; i++) {
		yellowGems[i]->draw(w);
	}

	for(int i=0; i<violetGemsNumber; i++) {
		violetGems[i]->draw(w);
	}

}

/*Recoit le nombre d'objet MAJ et recoit les MAJ concernees*/
void ClientWorldObjects::receive() {	
	size_t received;
	int gemUpdate;

	/*On recoit d'abord le nombre de gems jaunes MAJ*/
	socket->receive(&yellowGemsUp, sizeof(int), received);

	/*Recoit ensuite les gems mise a jour*/
	for(int i = 0; i < yellowGemsUp; i++) {
		socket->receive(&gemUpdate, sizeof(int), received);
		yellowGems[gemUpdate]->picked = true;
	}

	/*On recoit d'abord le nombre de gems jaunes MAJ*/
	socket->receive(&violetGemsUp, sizeof(int), received);

	/*Recoit ensuite les gems mise a jour*/
	for(int i = 0; i < violetGemsUp; i++) {
		socket->receive(&gemUpdate, sizeof(int), received);
		violetGems[gemUpdate]->picked = true;
	}
}


/*Appelle les methodes animations de chaque objets du monde*/
void ClientWorldObjects::animationObjects() {
	for(int i=0; i<yellowGemsNumber; i++) {
		yellowGems[i]->animation();
	}

	for(int i=0; i<violetGemsNumber; i++) {
		violetGems[i]->animation();
	}
}

